/*******************************************************************************
*	                           bsp cpu.c
*******************************************************************************/
#include "bsp.h"
#include "mytype.h"
#include "str_ext.h"

/*******************************************************************************
* @brief  配置值
*******************************************************************************/
static const uint32_t cfg_req[4] = 
{
	UINT32_MAX ^ ( BIT(22)| BIT(20) | BIT(19) | BIT(0)),	// 开低压检测 2.6V、低压复位， 开启数据Flash空间
	BITS(20,31) | 0x10000 * 4,	// 数据 Flash 起始地址。 保留位20-31必须是1
	0xFFFF5A5A,	// 安全锁
	UINT32_MAX, // 多功能管脚的默认值
};

/*******************************************************************************
* @brief  检测并配置.
*******************************************************************************/
void bsp_cpu_option_check(void)
{
	uint32_t option[6];
	
	SYS_UnlockReg();
	
	FMC_Open();
	
	option[0] = FMC_Read(FMC_CONFIG_BASE + 0);
	option[1] = FMC_Read(FMC_CONFIG_BASE + 4);
	option[2] = FMC_Read(FMC_CONFIG_BASE + 8);
	option[3] = FMC_Read(FMC_CONFIG_BASE + 12);
	
	if(comp_u32(cfg_req, option, 4))
	{
		copy_u32(cfg_req, option, 4);
		FMC_WriteConfig(option, 4);
		NOP1();
	}
	
	FMC_Close();
	
	SYS_LockReg();
}

